home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
LIBRARY
/
PRUS101
/
FTIMER.DOK
< prev
next >
Wrap
Text File
|
1994-12-08
|
19KB
|
448 lines
/////////////////////\\\\\\\\\\\\\\\\\\\\\\\
Dokumentation zur FIDO Unit FTIMER
\\\\\\\\\\\\\\\\\\\\\///////////////////////
RELEASE 1.02
^^^^^^^^^^^^
=========================================================================
Autor: Peter Holschbach, 2:2450/660.3 @ FidoNet, Remscheid, 26.06.1994
=========================================================================
1. Timer :
-----------
Die Unit FTIMER.PAS stellt Funktionen und Prozeduren zur
Zeitmessung bis max. 24h zu Verfügung. Bis zu 10 unabhängige
Timer können mit dieser Unit verwaltet werden (Auflösung
ca. 55ms).
Zusätzlich könne 10 weitere Timer mit einer Auflösung von
einer Mikrosekunde und einer max. Laufzeit von 71 Minuten
verwaltet werden.
Im Laufe der Zeit traten mit dieser Unit viele Probleme auf.
An dieser Stelle möchte ich kurz meine Erkenntnisse
zusammenstellen.
1. Unter Windows kommen bei den schnellen Timer immer wieder
negative Zeiten heraus, weil scheinbar Interrupts
verlohren gehen.
2. Um kompatibel zu sein, habe ich bei den langsamen Timern
zum Lesen der Zeit die BIOS-Funktion 1AH verwendet.
Wenn man diese sehr oft aufruft, zählt der PC das
Datum nichtmehr weiter. Die Ursache ist mir z.Zt.
nicht klar. Die Unit kann durch den Compiler-Switch
"$DEFINE UseBios" auf diese Betriebsart umgestellt werden.
Ist "UseBios" abgeschaltet, wird direkt auf die
Daten des System-Tickers zugegriffen.
Dies ist eine Low Level Unit. Sie benötigt keinerlei Routinen
anderer Units, mit Ausnahme der in Turbo Pascals (6.0 oder
höher) Unit-Library TURBO.TPL enhaltenen Standard-Units.
2. Kurzbeschreibung:
--------------------
DeInstallFastTimer ... macht die Änderungen rückgängig, die
an der Programmierung des Zählerbausteins
vorgenommen werden mußte.
FreeFastHandles ...... zum internen Gebrauch der Unit. Flags zum
Markieren eines belegten hochauflösenden Timers.
FreeHandles .......... zum internen Gebrauch der Unit. Flags zum
Markieren eines belegten Timers.
GetFastTimerHandle ... wie GetTimerHandle für hochauflösende
Timer.
GetTimerHandle ....... liefert die Nummer eines freien Handle
zurück. Sind alle Handle Belegt, wird eine
Null zurückgegeben. Der Timer ist bis zur
Freigabe reserviert.
GetFastTimeSec ....... bibt die Zeit in Sekunden zurück, die seit
dem Start des Timers vergangen ist.
GetTimeSec ........... gibt die Zeit in Sekunden zurück, die seit
dem Start des Timers vergangen ist.
GetTimeTicks ......... gibt die Anzahl der Timerticks zurück, die
seit dem Start des Timers mit StartTimer
vergangen ist.
InstallFastTimer ..... Bereitet den Timerbaustein für die
Zeitmessung vor und bestimmt die
Verzugszeiten der Funktionen die zur
Messung notwendig sind.
ReadFastTimer ........ gibt den aktuellen Wert des Timerbausteins
sowie das LSB des Systemtickers zurück.
Diese Funktion wird von anderen Funktionen
verwendet.
StartFastTimer ....... startet die Zeitmessung eines hochauflösenden
Timers.
StartTimer ........... startet die Zeitmessung eines Timers. Es
wird nicht geprüft ob der Handle belegt ist.
StartFastTimeField ... zum internen Gebrauch der Unit. Enthält die
Startzeiten aller hochauflösenden Timer.
StartTimeField ....... zum internen Gebrauch der Unit. Enthält die
Startzeiten aller Timer.
StopTimer ............ der Timer wird angehalten. Eine Abfrage des
Timers liefert jetzt immer den größtmöglichen
Wert zurück.
TicksPerSecond ....... Anzahl der Systemticks pro Sekunde als REAL
Konstante.
TimeAccessRec ........ Datenstruktur fü den internen Gebrauch.
Ermöglicht den Zugriff auf einen LongInt Typ
als LongInt und zwei Word Variablen.
TimerHandle .......... wird immer beim Aufruf von StartTimer auf
die aktuelle Nummer des Handle gesetzt.
UnGetFastTimerHandle . wie "UnGetTimerHandle" für die
hochauflösenden Timer.
UnGetTimerHandle ..... gibt den zum Handle korrospondierenden
Timer wieder frei. War der Handle unbelegt,
liefert die Funktion FALSE als Fehlermeldung
zurück.
3. Detaillierte Beschreibung:
-----------------------------
===============================================================
DeInstallFastTimer
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... Der Timerbaustein wird wieder mit seinen
Standardparametern programmiert
DEKLARATION ... Procedure DeInstallFastTimer
PARAMETER ... keine
ERGEBNIS ... ein Zugriff auf hochauflösende Timer
führt zu unsinnigen Werten.
===============================================================
GetFastTimerHandle
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... belegt den nächsten freien Timer in der Liste
der hochauflösenden Timer.
DEKLARATION ... function GetFastTimerHandle : Word
PARAMETER ... keine
ERGEBNIS ... eine Variable des Typs WORD, die bei Werten
größer Null die Nummer des Handle darstellt,
bzw. bei Null eine Fehlermeldung (kein freier
Timer vorhanden).
===============================================================
GetTimerHandle
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... belegt den nächsten freien Timer in der Liste.
DEKLARATION ... function GetTimerHandle : Word
PARAMETER ... keine
ERGEBNIS ... eine Variable des Typs WORD, die bei Werten
größer Null die Nummer des Handle darstellt,
bzw. bei Null eine Fehlermeldung (kein freier
Timer vorhanden).
===============================================================
GetTimerTicks
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... ermittelt die Laufzeit de Timers seit
StartTimer
DEKLARATION ... Function GetTimerTicks (Handle :Word):LongInt
PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
reserviert wurde.
ERGEBNIS ... die Zeit seit Start des Timers in Ticks
(ca. 18,2 Ticks/sec)
===============================================================
GetFastTimeSec
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... ermittelt die Laufzeit des hochauflösenden
Timers in Sekunden
DEKLARATION ... Function GetFastTimerSec (Handle :Word):Real
PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
reserviert wurde.
ERGEBNIS ... die Laufzeit des Timers in Sekunden.
===============================================================
GetTimeSec
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... ermittelt die Laufzeit des Timers in Sekunden
DEKLARATION ... Function GetTimerSec (Handle :Word):LongInt
PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
reserviert wurde.
ERGEBNIS ... die Laufzeit des Timers in Sekunden.
===============================================================
InstallFastTimer
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... Der Timerbaustein des PC wird umprogrammiert
um Messungen mit Mikrosekundenauflösung
zu erlauben. Die Uhr des PC wird hierdurch
kaum (max. 65ms) beeinflußt.
DEKLARATION ... Procedure InstallFastTimer
PARAMETER ... -
ERGEBNIS ... Alle Funktionen für hochauflösenden Timer
können jetzt erst verwendet werden.
===============================================================
StartFastTimer
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... der hochauflösende Timer wird gestartet und
die aktuelle Nummer des Handle in
FastTimerHandle abgelegt.
DEKLARATION ... Procedure StartFastTimer (Handle : Word)
PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
reserviert wurde.
ERGEBNIS ... die Handlenummer in FastTimerHandle
===============================================================
StartTimer
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... der Timer wird gestartet und die aktuelle
Nummer des Handle in TimerHandle abgelegt.
Sonderfunktion bei einer ungültigen Handle-
nummer (= 0) wird ein Handle über die
Funktion GetHandle reserviert.
DEKLARATION ... Procedure StartTimer (Handle : Word)
PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
reserviert wurde. Oder 0 um einen Handle
zu reservieren.
ERGEBNIS ... die Handlenummer in TimerHandle
===============================================================
StopTimer
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... der Timer bekommt eine spezielle Kennung.
Bei der Abfrage mit GetTimexxx wird immer
der größten Wert zurückgeliefert
DEKLARATION ... Procedure StopTimer (Handle : Word);
PARAMETER ... die Nummer des Handle, der mir GetTimerHandle
reserviert wurde.
ERGEBNIS ... -
===============================================================
UnGetFastTimerHandle
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 17.11.1994 LETZTE ÄNDERUNG ...
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... gibt den Handle wider frei
DEKLARATION ... function UnGetFastTimerHandle (Handle : Word)
: Boolean
PARAMETER ... die Nummer des Handle
ERGEBNIS ... TRUE wenn der Handle belegt war.
===============================================================
UnGetTimerHandle
---------------------------------------------------------------
ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
ERSTDATUM ... 26.06.1994 LETZTE ÄNDERUNG ... 26.06.1994
MODIFIKATION ...
---------------------------------------------------------------
BESCHREIBUNG ... gibt den Handle wider frei
DEKLARATION ... function UnGetTimerHandle (Handle : Word)
: Boolean
PARAMETER ... die Nummer des Handle
ERGEBNIS ... TRUE wenn der Handle belegt war.
4. Beispiele:
-------------
===============================================================
Gesamtbeispiel für Timer
---------------------------------------------------------------
Var MyTimerHandle1,
MyTimerHandle2 : Word;
Begin
MyTimerHandle1 := GetTimerHandle;
MyTimerHandle2 := GetTimerHandle;
If (MyTimerHandle1 = 0) OR (MyTimerHandle2 = 0) then Begin
Writeln ('Kein Timer mehr frei ! ');
Halt;
End;
StartTimer(MyTimerHandle1);
Delay (1000);
StartTimer (MyTimerHandle2);
Delay (1000);
Writeln (GetTimeSec (MyTimerHandle1)); {Ergebnis: 2 }
Delay (1000);
Writeln (GetTimeSec (MyTimerHandle2)); {Ergebnis: 2 }
If Not UnGetTimerHandle (MyTimerHandle1) OR
Not UnGetTimerHandle (MyTimerHandle2) Then Begin
Writeln ('Fehler bei der Freigabe !');
End;
End.
---------------------------------------------------------------
Eine Vereinfachung für den Umgang mit nur einem Timer stellt
die Sonderfunktion von StartTimer dar, einen Handle reservieren
zu können:
StartTimer (0); {Handle reservieren u. Timer starten }
Delay (1000);
Writeln (GetTimeSec (TimerHandle)); {Ergebnis: 1}
UnGetTimerHandle (TimerHandle);
===============================================================
Kurzes Beispiel für die hochauflösenden Timer
---------------------------------------------------------------
Var MyTimerHandle1 : Word
Begin
InstallFastTimer;
MyTimerHandle1 := GetFastTimerHandle;
If (MyTimerHandle1 = 0) then Begin
Writeln ('Kein Timer mehr frei ! ');
Halt;
End;
StartFastTimer(MyTimerHandle1);
Delay (1);
Writeln (GetFastTimeSec (MyTimerHandle1)); {Ergebnis: 0.001 }
DeInstallFastTimer;
End.
---------------------------------------------------------------
5. History:
-----------
Neuerungen nach Release ...
---------------------------
1.01
----
- StartTimer mit erweitertet Funktionalität.
1.02
----
- Kosmetische Änderungen:
- die Konstante "TicksPerSecond" ist global
verfügbar
- Neu:
- 10 Timer mit einer hohen Auflösung (1 Mikrosekunde)
und maximal 71 Minuten Laufzeit können verwaltet
werden.
==========================================================================
/////////////////////\\\\\\\\\\\\\\\\\\\\\\\
Ende der Dokumentation zur FIDO Unit FTIMER
\\\\\\\\\\\\\\\\\\\\\///////////////////////